package cn.net.Inner;
/*本类用作测试内部类的入门案例*/
public class TestInner1 {
    public static void main(String[] args) {
        //3.创建内部类对象，使用内部类的资源
        /*外部类名.内部类名 对象名 = 外部类对象.内部类对象*/
        Outer.Inter inter = new Outer().new Inter();
        inter.delete();//Inner...delete()
        System.out.println(inter.sum);//null

        //4.内部类调用【外部类的方法】--这样是创建了一个外部类的匿名对象，只使用一次
        new Outer().find();//0
    }
}
//1.创建外部类 Outer
class Outer{
    String name;
  private   int age;
    public void find(){
        System.out.println("Outer...find()");//Outer...find()
        //6.测试外部类是否可以使用内部类的资源？？不可以！！！包括内部类的属性和方法
             /*外部类如果想要使用内部类的资源，必须先创建内部类对象*/
        Inter i = new Inter();
        System.out.println(i.sum);//10
        i.delete();//Inner...delete()
    }

    // //2.创建内部类Inner--类的特殊成员
   /*根据内部类位置的不同，分为：成员内部类(类里方法外)、局部内部类(方法里)*/
    class Inter{
        int sum =10;//内部类的成员变量
        public void delete(){//内部类的成员方法
            System.out.println("Inner...delete()");
            //5.测试【内部类】是否可以使用【外部类的资源】？  可以！！包括外部的私有成员
            System.out.println(name);//在内部类方法里 null
            System.out.println(age);//0
            //find();无法使用外部类方法，抛出异常StackOverFlowException栈溢出异常
        }



    }

}